﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace blackhouse.BlackApart.Data {
    public interface IReservationDataAccess {

        //int SaveReservation(int reservationId, int apartmentId, double price, double priceWithoutRabat, float rabat, int numberOfPeople, DateTime startDate, DateTime endDate);
        //int SaveReservation(int reservationId, int apartmentId, int numberOfPeople, DateTime startDate, DateTime endDate);
        //ReservationData[] GetReservations(int apartmentId, DateTime startDate, DateTime endDate);
        ClientData GetClient(int clientId);
        ClientData GetClientByEmail(string email);
        int SaveClient(string eMail, string phoneNumber, string personTitle, string firstName, string lastName, string language, string userPrefferCurrency);
        //int SavePaymentType(int id, string key, bool waitForCash);
        //int AddReservationHeader(int clientId, double totalPrice, double totalPriceWithoutRabat, float rabat, bool vatInvoice, int paymentTypeId, string reservationTypeId);
        //bool JoinReservationHeader(int userReservationId, int apartmentReservationId);
        //ReservationHeaderData GetReservationHeader(int reservationId, string language);
        //ReservationHeaderData GetReservationHeader(string reservationNumber, string language);
        PaymentData GetPaymentType(int paymentTypeId, string language);
        PaymentData[] GetWebPaymentTypes(string language);
        //ReservationData[] GetReservationsByHeader(int reservationId);
        //void AddMailToSend(int reservationId);
        bool ChangeReservationStatus(int reservationId, string newStatusKey);
        //bool RemoveReservation(int reservationId);
        WebReservationSaveData AddWebReservation(DateTime arrivalDate, DateTime departureDate, double priceWithRabat, double price, float rabat);
        int AddApartmentToReservation(int reservationId, int apartmentId, int forPeoples);
        int AddRabatToReservation(int reservationId, string rabatKey, float rabatValue);
        void RollbackWebReservation(int reservationId);
        WebReservationData GetWebReservation(int reservationId, string language);
        WebReservationData GetWebReservation(Guid reservationGuid, string language);
        WebReservationData GetWebReservation(string reservationNumber, string language);
        WebReservationData[] FindReservationForInterviewer();
        ApartmentWebReservationData[] GetApartmentsWebReservation(int reservationId);
        ReservationPriceRabatData[] GetRabatsWebReservation(int reservationId, string language);
        bool UpdateWebReservation(int reservationId, DateTime arrivalDate, DateTime departureDate, double finalPrice, double price, float Rabat, bool vatInvoice, string comments, int clientId, int paymentType);
        Dictionary<DateTime, int> GetAvabilityOfApartmentType(int groupId, DateTime fromDay, DateTime toDay);

    }
}
